module.exports = {
  MAX_PACKETID: 16384,
  RELIABLE_BUFFER: 1024,
  MAX_CHANNELS: 10240,
  MAX_CHSEQUENCE: 1024,
  MAX_BUNCH_HEADER_BITS: 64,
  NAME_SIZE: 1024,
  MAX_NETWORKED_HARDCODED_NAME: 410,
  MAX_CONSTRUCTED_PARTIAL_SIZE_IN_BYTES: 1024 * 64 * 8,
  ROLE_MAX: 4,

  CHTYPE_NONE: 0,
  CHTYPE_CONTROL: 1,
  CHTYPE_ACTOR: 2,
  CHTYPE_FILE: 3,
  CHTYPE_VOICE: 4,
  CHTYPE_MAX: 8,
  MAX_PACKET_SIZE: 1228,
  MAX_BUNCH_DATA_BITS: 9824, // MAX_PACKET_SIZE * 8

  EventTypes: Object.freeze({
    // event from packets
    UEBUNCHES: Symbol('UEBunches'),

    // bunch process -> new event
    SELFLOCEX: Symbol('SelfLocEx'),
    CARSYNC: Symbol('CarSync'),
    ENCRYPTIONKEY: Symbol('EncryptionKey'),
    GAMESTART: Symbol('GameStart'),
    GAMESTOP: Symbol('GameStop'),
    ACTOROPEN: Symbol('ActorOpen'),
    ACTORCLOSE: Symbol('ActorClose'),
    ITEMDROP: Symbol('ItemDrop'),
    ITEMGONE: Symbol('ItemGone'),
    DROPPEDITEMUPDATE: Symbol('DroppedItemUpdate'),
    PLAYERUPDATE: Symbol('PlayerUpdate'),
    GAMESTATEUPDATE: Symbol('GameStateUpdate'),
    PLAYERSTATEUPDATE: Symbol('PlayerStateUpdate'),
    TEAMUPDATE: Symbol('TeamUpdate'),
    APAWNUPDATE: Symbol('APawnUpdate')
  }),

  ACTOR_TYPES: Object.freeze({
    GAME_STATE: 'GAMESTATE',
    PLAYER: 'PLAYER',
    DROPPED_ITEM_GROUP: 'DROPPEDITEMGROUP',
    DROPPED_ITEM: 'DROPPEDITEM',
    PLANE: 'PLANE',
    PARACHUTE: 'PARACHUTE',
    CAR: 'CAR',
    // TWO_SEAT_CAR: 'TWOSEATCAR',
    // FOUR_SEAT_CAR: 'FOURSEATCAR',
    // SIX_SEAT_CAR: 'SIXSEATCAR',
    // BOAT: 'BOAT',
    AIRDROP: 'AIRDROP',
    THROW: 'THROW',
    PLAYER_STATE: 'PLAYERSTATE',
    TEAM: 'TEAM',
    BOX: 'BOX',
    OTHER: 'OTHER'
  }),

  PUBGNAMES: {
    0: 'None',
    1: 'ByteProperty',
    2: 'IntProperty',
    3: 'BoolProperty',
    4: 'FloatProperty',
    5: 'ObjectProperty',
    6: 'NameProperty',
    7: 'DelegateProperty',
    8: 'DoubleProperty',
    9: 'ArrayProperty',
    10: 'StructProperty',
    11: 'VectorProperty',
    12: 'RotatorProperty',
    13: 'StrProperty',
    14: 'TextProperty',
    15: 'InterfaceProperty',
    16: 'MulticastDelegateProperty',
    17: 'Available',
    18: 'LazyObjectProperty',
    19: 'SoftObjectProperty',
    20: 'UInt64Property',
    21: 'UInt32Property',
    22: 'UInt16Property',
    23: 'Int64Property',
    24: 'Int32Property',
    25: 'Int16Property',
    26: 'Int8Property',
    27: 'Available',
    28: 'MapProperty',
    29: 'SetProperty',
    30: 'Core',
    31: 'Engine',
    32: 'Editor',
    33: 'CoreUObject',
    34: 'EnumProperty',

    50: 'Cylinder',
    51: 'BoxSphereBounds',
    52: 'Sphere',
    53: 'Box',
    54: 'Vector2D',
    55: 'IntRect',
    56: 'IntPoint',
    57: 'Vector4',
    58: 'Name',
    59: 'Vector',
    60: 'Rotator',
    61: 'SHVector',
    62: 'Color',
    63: 'Plane',
    64: 'Matrix',
    65: 'LinearColor',
    66: 'AdvanceFrame',
    67: 'Pointer',
    68: 'Double',
    69: 'Quat',
    70: 'Self',
    71: 'Transform',

    100: 'Object',
    101: 'Camera',
    102: 'Actor',
    103: 'ObjectRedirector',
    104: 'ObjectArchetype',
    105: 'Class',
    106: 'ScriptStruct',
    107: 'Function',

    200: 'State',
    201: 'TRUE',
    202: 'FALSE',
    203: 'Enum',

    204: 'Default',
    205: 'Skip',
    206: 'Input',
    207: 'Package',
    208: 'Groups',
    209: 'Interface',
    210: 'Components',
    211: 'Global',
    212: 'Super',
    213: 'Outer',
    214: 'Map',
    215: 'Role',
    216: 'RemoteRole',
    217: 'PersistentLevel',
    218: 'TheWorld',
    219: 'PackageMetaData',
    220: 'InitialState',
    221: 'Game',
    222: 'SelectionColor',
    223: 'UI',
    224: 'ExecuteUbergraph',
    225: 'DeviceID',
    226: 'RootStat',
    227: 'MoveActor',
    230: 'All',
    231: 'MeshEmitterVertexColor',
    232: 'TextureOffsetParameter',
    233: 'TextureScaleParameter',
    234: 'ImpactVel',
    235: 'SlideVel',
    236: 'TextureOffset1Parameter',
    237: 'MeshEmitterDynamicParameter',
    238: 'ExpressionInput',
    239: 'Untitled',
    240: 'Timer',
    241: 'Team',
    242: 'Low',
    243: 'High',
    244: 'NetworkGUID',
    245: 'GameThread',
    246: 'RenderThread',
    247: 'OtherChildren',
    248: 'Location',
    249: 'Rotation',
    250: 'BSP',
    251: 'EditorSettings',
    252: 'AudioThread',
    253: 'ID',

    // Online
    280: 'DGram',
    281: 'Stream',
    282: 'GameNetDriver',
    283: 'PendingNetDriver',
    284: 'BeaconNetDriver',
    285: 'FlushNetDormancy',
    286: 'DemoNetDriver',
    287: 'GameSession',
    288: 'PartySession',
    289: 'GamePort',
    290: 'BeaconPort',

    // Texture settings.
    300: 'Linear',
    301: 'Point',
    302: 'Aniso',
    303: 'LightMapResolution',

    // Sound.
    // REGISTER_NAME(310,)
    311: 'UnGrouped',
    312: 'VoiceChat',

    // Optimized replication.
    320: 'Playing',
    322: 'Spectating',
    325: 'Inactive',

    // Log messages.
    350: 'PerfWarning',
    351: 'Info',
    352: 'Init',
    353: 'Exit',
    354: 'Cmd',
    355: 'Warning',
    356: 'Error',

    // File format backwards-compatibility.
    400: 'FontCharacter',
    401: 'InitChild2StartBone',
    402: 'SoundCueLocalized',
    403: 'SoundCue',
    404: 'RawDistributionFloat',
    405: 'RawDistributionVector',
    406: 'InterpCurveFloat',
    407: 'InterpCurveVector2D',
    408: 'InterpCurveVector',
    409: 'InterpCurveTwoVectors',
    410: 'InterpCurveQuat',

    450: 'AI',
    451: 'NavMesh',

    500: 'PerformanceCapture',

    // Special config names - not required: be consistent for network replication
    600: 'EditorLayout',
    601: 'EditorKeyBindings',
    602: 'NAME_MaxHardcodedNameIndex'
  }
}
